package com.nbcb.fund.common.util;

import java.security.MessageDigest;

/**
 * MD5加密类
 *
 * @author cgf 2015年5月6日 下午1:54:30
 * @mod zhy
 */
public class MD5Util {

    private static MessageDigest md5 = null;

    public static String MD5(String inStr) {
        if (inStr == null) {
            return "";
        }
        try {
            if (md5 == null) md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        char[] charArray = inStr.toCharArray();
        byte[] byteArray = new byte[charArray.length];

        for (int i = 0; i < charArray.length; i++)
            byteArray[i] = (byte) charArray[i];
        byte[] md5Bytes = md5.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16) hexValue.append("0");
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }

    /**
     * @param psw  密码
     * @param salt 严
     * @return MD5 32位
     */
    public static String pswMD5(String psw, String salt) {
        if (psw == null) {
            psw = "";
        }
        if (salt == null) {
            salt = "";
        }
        return MD5(MD5(psw) + salt);
    }

    /**
     * @param psw  密码
     * @param salt 严
     * @return MD5 32位
     */
    public static String pswMD52(String psw, String salt) {
        if (psw == null) {
            psw = "";
        }
        if (salt == null) {
            salt = "";
        }
        return MD5(psw + salt);
    }

    /**
     * MD532位加密
     *
     * @param s
     * @return
     */
    public final static String MD5To32byte(String s) {
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] strTemp = s.getBytes();
            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
            mdTemp.update(strTemp);
            byte[] md = mdTemp.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return (new String(str)).toUpperCase();
        } catch (Exception e) {
            return null;
        }
    }


    public static void main(String[] args) {
        String s = pswMD5("123456", "123456");
        System.out.println(s);
    }
}
